import Service from '../../../../libs/service_0_0_6.js'
import HarWorker from "./entity/HarWorker.js"

/**
* @type {number} идентификатор для метода интервального вызова функции
*/
let interval = null

/**
* @type {HarWorker} экземпляр класса для работы с HAR-архивом
*/
let harWorker

document.addEventListener('DOMContentLoaded', async function() {
    document.querySelector('#button_get_har').addEventListener('click', async function(event) {
        await getHarWithCallbackFunction(harWorker)
    })

    document.querySelector('#button_download_har').addEventListener('click', function(event) {
        let textInputDownloadHar = document.querySelector('#text_input_download_har')
        let filename = textInputDownloadHar.value
        if (filename !== '') {
            harWorker.downloadHarLog(filename)
        }
    })

    document.querySelector('#is_periodically_load').addEventListener('click', async function(event) {
        let textInputTimeout = document.querySelector('#text_input_timeout')
        textInputTimeout.disable = this.checked

        if (this.checked) {
            textInputTimeout.removeAttribute("disabled", "")
            textInputTimeout.setAttribute("enabled", "")
            let newTimeout = parseInt(textInputTimeout.value)
            clearCurrentAndSetNewInterval(newTimeout)
        } else {
            textInputTimeout.removeAttribute("enabled", "")
            textInputTimeout.setAttribute("disabled", "")
            clearInterval(interval)
            interval = null
        }
    })

    document.querySelector('#button_set_timeout').addEventListener('click', async function(event) {
        let textInputTimeout = document.querySelector('#text_input_timeout')
        let newTimeout = parseInt(textInputTimeout.value)
        clearCurrentAndSetNewInterval(newTimeout)
    })
});

/**
* Очистить текущий интервал и создать новый с заданным таймаутом
* @param {number} timeout новый таймаут в миллисекундах
*/
function clearCurrentAndSetNewInterval(timeout) {
    clearInterval(interval)
    interval = null
    interval = setInterval(async function() {
        await getHarWithCallbackFunction(harWorker)
    }, timeout)
}

/**
* Получить HAR-архив
* @return список записей архива
*/
async function getHarWithCallbackFunction(object) {
    return chrome.devtools.network.getHAR(callback(object))
}

/**
* Коллбэк-функция с замыканием для передачи данных загруженного HAR-архива в класс HarWorker, а так же обновления
* данных по текущему архиву
*/
let callback = function(object) {
    return function(harEntries) {
        object.setHarEntries(harEntries)
        document.querySelector('#info').innerText = object.getDataToHarEntries()
    };
}

harWorker = new HarWorker()